home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / reader_requests / scilab / demos / velpic / plotdb.sci < prev    next >
Text File  |  1999-09-16  |  4KB  |  127 lines

  1. //[]=plotdb(f,gain,thetaphi,modxy)
  2. //plotdb(f), plotdb(f,gain), plotdb(f,modxy), plotdb(f,gain,tetaphi)
  3. //plotdb(f,gain,modxy), plotdb (f,gain,tetaphi,modxy)
  4. //% description
  5. //plots a projection of the function f(x,y). The point of view of  the
  6. //projection is from above the x-y plane of the matrix grid.The matrix
  7. //is rotated by theta in the x-y plane about  the geometric  center of
  8. //the matrix and then tilted in the y-z plane by -phi.
  9. //The resulting plot is the  projection of  the rotated  function into
  10. //the x-y plane.
  11. //The independent grid variables are implicitly  taken to be the indi-
  12. //ces of the matrix f.
  13. //% description of input variables
  14. // f        :matrix to be plotted
  15. // gain     :plot is actually of gain*f (default  1)
  16. //           When gain='agc' the gain is  calculated to obtain  a plot
  17. //           whose heigth to width ratio is 1/4.
  18. //           The agc gain is printed on the screen.
  19. //
  20. // thetaphi : [teta phi]  (defaut  [%pi/4,%pi/3])
  21. //           theta :rotation angle (around z-axis) in the x-y plane
  22. //           phi   :elevation viewing angle (around x-axis) above the
  23. //                  x-y plane
  24. //  modxy   :flag with possible values:
  25. //            'x' : only horizontal lines are drawn
  26. //            'y' : only vertical  lines are drawn
  27. //            'xy' : both h and v lines are drawn
  28. //!
  29. //author: C. Bunks  date: Jan 22, 1990
  30. //defaults for gain, theta, and phi
  31. [lhs,rhs]=argn(0),
  32. select rhs
  33.    case 1 then,
  34.      gain=1;
  35.      thetaphi=[%pi/4,%pi/3];
  36.      modxy='xy'
  37.    case 2 then,
  38.      if type(gain)=10 then
  39.        select gain
  40.          case 'agc' then modxy='xy'
  41.          case 'x'   then modxy='x';gain=1
  42.          case 'y'   then modxy='y';gain=1
  43.          case 'xy'  then modxy='xy';gain=1
  44.          else error('appel incorrect')
  45.        end,
  46.        thetaphi=[%pi/4,%pi/3];
  47.      else
  48.        if size(gain)=[1,2] then,
  49.           thetaphi=gain;
  50.           gain=1;
  51.           modxy='xy';
  52.        else,
  53.           thetaphi=[%pi/4,%pi/3];
  54.           modxy='xy';
  55.        end,
  56.      end
  57.    case 3 then,
  58.      if type(thetaphi)=10 then
  59.        modxy=thetaphi;
  60.        if type(gain)=10 then,
  61.          thetaphi=[%pi/4,%pi/3];
  62.        else,
  63.          if size(gain)=[1,2] then,
  64.             thetaphi=gain;
  65.             gain=1;
  66.          else,
  67.             thetaphi=[%pi/4,%pi/3];
  68.          end,            
  69.        end,
  70.      else
  71.        modxy='xy';
  72.      end
  73. end,
  74. theta=thetaphi(1),phi=thetaphi(2);
  75. st=sin(theta);ct=cos(theta);sp=sin(phi);cp=cos(phi);
  76. //grid variables
  77. [nr,nc]=size(f);
  78. x=(-(nc-1)/2:(nc-1)/2);
  79. y=((nr-1)/2:-1:-(nr-1)/2)';
  80. xe=[-(nc-1)/2,(nc-1)/2],
  81. ye=[(nr-1)/2,-(nr-1)/2];
  82. //gain
  83.    range=(maxi(f)-mini(f));
  84.    if gain='agc' then,
  85.       if range<>0 then,
  86.          gain=.25*sp*(nr*abs(st)+nc*abs(ct))/range;
  87.          print(6,gain),
  88.       else,
  89.          gain=1;
  90.          print(6,'NOTE: function is constant'),
  91.       end,
  92.    end,
  93.    f=f*gain;
  94. //rotation and projection
  95. //(xr,yr)=PROJ(ROT(theta,phi)*(x,y,f))
  96. //where ROT is the rotation matrix:
  97. //   [ct,-st,0;cp*st,cp*ct,-sp;sp*st,sp*ct,cp]
  98. //and PROJ((xr,yr,fr))=(xr,yr)
  99. //frame
  100. xmax=maxi(ct*xe-st*ye);xmin=mini(ct*xe-st*ye);
  101. ymax=[]
  102. ymin=[]
  103. for k=1:nr
  104.    yk=cp*(st*x+ct*y(k)*ones(x))+sp*f(k,:)
  105.    ymax=maxi([ymax,yk])
  106.    ymin=mini([ymin,yk])
  107. end
  108. dx=0.04*(xmax-xmin)
  109. dy=0.04*(ymax-ymin)
  110.  
  111. plot2d(0,0,[-1],"012",' ',[xmin-dx,ymin-dy,xmax+dx,ymax+dy])
  112. //plot matrix in both directions
  113. if part(modxy,1)='x' then
  114.    for k=1:nr,
  115.       plot2d([ct*x-st*y(k)*ones(x)]',...
  116.              [cp*(st*x+ct*y(k)*ones(x))+sp*f(k,:)]',[-1],"000");
  117.    end,
  118. end
  119. if part(modxy,length(modxy))='y' then
  120.    for k=1:nc,
  121.      plot2d([ct*x(k)*ones(y)-st*y]',...
  122.             [cp*(st*x(k)*ones(y)+ct*y)+sp*f(:,k)]',[-1],"000");
  123.    end,
  124. end
  125. //end
  126.  
  127.